Невозможно нажать QPushButton в простой программе - PullRequest
0 голосов
/ 27 мая 2010

По сути, я хочу простую кнопку с цветным текстом, которая при нажатии выходит из приложения.

Почему я не могу нажать кнопку в этой простой программе. Я использую QT 4.6 на Arch x86_64.

#include <QtGui/QApplication>
#include <QLabel>
#include <QPushButton>
#include<QtGui>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow *Main=new QMainWindow;

    QPushButton *button = new QPushButton(Main);
    QLabel *label = new QLabel(Main);
    label->setText("<h2><i>Hello</i> ""<font color=red>Qt!</font></h2>");
    label->setVisible(true);
    QObject::connect(button, SIGNAL(clicked()),label, SLOT(close()));
    label->setAlignment(Qt::AlignCenter|Qt::AlignVCenter);
    label->setWindowTitle("HelloWorld Test Program");
    Main->show();
    return a.exec();
}

Ответы [ 2 ]

3 голосов
/ 27 мая 2010

Помимо использования класса кнопок, который позволит вам отображать форматированный текст, вам также необходимо убедиться, что ваши соединения правильные.

В вашем примере вы подключаете сигнал clicked кнопки к слоту clear() метки, что не имеет смысла.

Чтобы выйти из приложения при нажатии кнопки, необходимо закрыть главное окно. Вот код для получения правильного соединения:

QObject::connect(button, SIGNAL(clicked()),Main, SLOT(close()));

Изменение этой отдельной строки кода в вашем примере недостаточно, потому что ваша метка нарисована поверх вашей кнопки, поэтому невозможно щелкнуть по ней графически. Вам нужно спрятать свой ярлык и вставить текст в кнопку:

button->setText("Hello");
label->setVisible(false);

Что касается функции расширенного текста в QPushButton, AFAIK, это невозможно сделать с QPushButton.

ОБНОВЛЕНИЕ: Вот способ поместить некоторый richtext в QPushButton. Он использует решение, описанное в моем комментарии: рисование QTextDocument на растровое изображение и установка этого растрового изображения в качестве значка кнопки.

#include <QtGui/QApplication>
#include <QLabel>
#include <QPushButton>
#include <QtGui>
#include <QTextDocument>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow *Main=new QMainWindow;

    QPushButton *button = new QPushButton(Main);
    QTextDocument Text;
    Text.setHtml("<h2><i>Hello</i> ""<font color=red>Qt!</font></h2>");

    QPixmap pixmap(Text.size().width(), Text.size().height());
    pixmap.fill( Qt::transparent );
    QPainter painter( &pixmap );
    Text.drawContents(&painter, pixmap.rect());

    QIcon ButtonIcon(pixmap);
    button->setIcon(ButtonIcon);
    button->setIconSize(pixmap.rect().size());
    QObject::connect(button, SIGNAL(clicked()),Main, SLOT(close()));
    Main->show();
    return a.exec();
}
1 голос
/ 27 мая 2010

Взгляните здесь . Виджет называется QwwRichTextButton .

Виджет QwwRichTextButton предоставляет кнопку, которая может отображать форматированный текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...