Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
1

QPushButton не нажимается

23.09.2014, 00:14. Показов 3922. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
Есть небольшой проект на 5 файлов. Дело в том, что когда я пытаюсь добавить кнопку (в answersmanager.cpp --> реализация метода drawInput) программа либо вылетает, либо работает, но кнопку нажать нельзя (просто ничего не происходит, она даже не нажимается). Вот сие творение:
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include "mainwindow.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
 
    return a.exec();
}

answersmanager.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef ANSWERSMANAGER_H
#define ANSWERSMANAGER_H
 
#include <QObject>
#include <QtWidgets>
#include <QVector>
 
class AnswersManager : public QObject
{
    Q_OBJECT
    public:
        explicit AnswersManager(QMainWindow* window);
        ~AnswersManager();
        static const int TOTAL_ANSWERS = 5;
        static const int SCORE_STEP = 1;
    signals:
 
    public slots:
 
    private:
        QVector<QLineEdit*> fields;
        QLineEdit* input;
        QPushButton* button;
 
        void drawFields(QMainWindow*);
        void drawInput(QMainWindow*);
        static QString getScoreString(int a);
};
 
#endif // ANSWERSMANAGER_H

answersmanager.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "answersmanager.h"
 
AnswersManager::AnswersManager(QMainWindow* window) : QObject(window)
{
    drawInput(window);
    drawFields(window);
}
 
AnswersManager::~AnswersManager()
{
}
 
void AnswersManager::drawFields(QMainWindow* window)
{
    //позиция левого верхнего угла layout-a QVBoxLayout
    int lx = 110, ly = 90;
    //координата первого поля для отображения ответа в layout
    int x = 30, y = 10;
    //размеры полей с ответами
    int w = 150, h = 20;
    //пространство между полями для ввода и границами QGroupBox
    int space = 10;
 
    QGroupBox* box = new QGroupBox(window);
    QVBoxLayout* layout = new QVBoxLayout();
    for(int i = 0; i < TOTAL_ANSWERS; ++i)
    {
        QHBoxLayout* hLayout = new QHBoxLayout();
 
        QLabel* label = new QLabel(box);
        label->setText(getScoreString(i+1));
        label->setGeometry(x - 20, y, 40, 20);
        hLayout->addWidget(label);
 
        QLineEdit* edit = new QLineEdit(box);
        edit->setGeometry(x, y, w, h);
        edit->setReadOnly(true);
        hLayout->addWidget(edit);
        fields.push_back(edit);
 
        layout->addLayout(hLayout);
        y += space;
    }
 
    int boxXSize = w + 2 * space;
    int boxYSize = y + h * TOTAL_ANSWERS + space * (TOTAL_ANSWERS - 1);
    box->setGeometry(lx, ly, boxXSize, boxYSize);
    box->setLayout(layout);
    box->show();
}
 
QString AnswersManager::getScoreString(int a)
{
    QString maxString = QString::number(TOTAL_ANSWERS * SCORE_STEP);
    QString result = QString::number(a * SCORE_STEP);
    while(result.length() < maxString.length())
        result = ' ' + result;
    return result;
}
 
void AnswersManager::drawInput(QMainWindow* window)
{
    //позиция и размер поля для ввода
    int iX = 140, iY = 310;
    int iW = 130, iH = 20;
    input = new QLineEdit(window);
    input->setGeometry(iX, iY, iW, iH);
    input->show();
 
    //позиция и размер кнопки ввода
    int bX = 150, bY = 340;
    int bW = 80, bH = 30;
    button = new QPushButton("Проверить", window);
    button->setGeometry(bX, bY, bW, bH);
    button->show();
}

mainwindow.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include "answersmanager.h"
#include <QMainWindow>
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
 
private:
    void setMenuBarBackgroundColor();
 
    AnswersManager manager;
    Ui::MainWindow *ui;
};
 
#endif // MAINWINDOW_H

mainwindow.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), manager(this)
{
    ui->setupUi(this);
 
    const int WINDOW_WIDTH = 400;
    const int WINDOW_HEIGHT = 400;
    this->setFixedSize(WINDOW_WIDTH, WINDOW_HEIGHT);
 
    setMenuBarBackgroundColor();
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::setMenuBarBackgroundColor()
{
    QPalette palette = this->statusBar()->palette();
    palette.setColor(QPalette::Background, Qt::white);
    this->statusBar()->setPalette(palette);
    this->statusBar()->setAutoFillBackground(true);
    this->statusBar()->showMessage("Пользователь: Daniil      Всего заработано очков: 0");
}

В чем проблема?

+ Архив с проектом:
Вложения
Тип файла: rar game.rar (4.3 Кб, 5 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2014, 00:14
Ответы с готовыми решениями:

Qt qpushbutton неактивен
добавляю на форму кнопку через дизайнер, кликается, добавляю динамически, не кликается, как и...

QPushButton+QMenu
Помогите пожалуйста. Сделал я кнопку прикрепив к ней меню menuButton = new...

QPushButton QSS
Всем привет! Объясните, пожалуйста, почему при создании QPushButton с использованием &quot;Дизайнера&quot;...

Ошибка с QPushButton
Добрый вечер! У меня возникла ошибка с QPushButton. Ошибка заключается в том, что эти два виджета...

7
63 / 63 / 15
Регистрация: 20.08.2014
Сообщений: 593
23.09.2014, 08:27 2
Dani,
C++ (Qt)
1
2
    Button->setFocus();
    Button->setDefault(true);
1
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
23.09.2014, 11:15  [ТС] 3
Pingvinoff, не помогло. На кнопку просто стал фокус, но нажать ее нельзя.
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
25.09.2014, 10:35  [ТС] 4
Актуально.
0
596 / 396 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
25.09.2014, 11:31 5
Не могу понять. По какой-то причине кнопка фокус не захватывает.
А не проще сделать виджет в дизайнере?
Или написать нормальный виджет, добавить в него все нужные элементы, а потом уже создавать объект с MainWindow в качестве родителя?
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.09.2014, 15:08 6
Лучший ответ Сообщение было отмечено Dani как решение

Решение

Сделать manager указателем, и инициализировать его после вызова setupUi():
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    manager = new AnswersManager(this);
    const int WINDOW_WIDTH = 400;
    const int WINDOW_HEIGHT = 400;
    this->setFixedSize(WINDOW_WIDTH, WINDOW_HEIGHT);
 
    setMenuBarBackgroundColor();
}
2
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
25.09.2014, 16:06  [ТС] 7
alsav22, помогло. Спасибо большое
А в чем все-таки проблема была?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.09.2014, 16:52 8
Цитата Сообщение от Dani Посмотреть сообщение
А в чем все-таки проблема была?
Не знаю.

Добавлено через 24 минуты
Вот с этой строчкой, в ui_mainwindow.h, связано:
C++ (Qt)
1
MainWindow->setCentralWidget(centralWidget);
Без неё и так будет работать.
1
25.09.2014, 16:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.09.2014, 16:52
Помогаю со студенческими работами здесь

QPushButton+QSS
Всем добрый день возник вопрос по отрисовке на форме нажатой клавиши pushButton наподобии В...

QTableWidget c QPushButton
Доброго времени суток. В QTableWidget при помощи setCellWidget вставил кнопку и повесил на нее...

QPushButton и '&'
Подскажите как установить на QPushButton push-&gt;setText(&quot;&amp;&quot;); символ не отображается...

QPushButton и tag
Здравствуйте. В проекте множество форм и в каждой форме множество кнопок. В ходе работы, иконки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru