无法在简单程序中按QPushButton

时间:2010-05-27 12:29:52

标签: c++ linux qt qt4

基本上,我想要一个带有彩色文本的简单pushButton,当按下它时会退出应用程序。

为什么我不能在这个简单的程序中按下PushButton。我在Arch x86_64上使用QT 4.6。

#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 个答案:

答案 0 :(得分:3)

除了使用允许您显示富文本的按钮类之外,还需要确保连接正确。

在您的示例中,您将按钮的clicked信号连接到标签的clear()插槽,这是无意义的。

要在单击按钮时退出应用程序,您需要关闭主窗口。以下是获得正确连接的代码:

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

在您的示例中更改此单行代码是不够的,因为您的标签是在按钮顶部绘制的,因此无法以图形方式单击它。您需要隐藏标签并在按钮中添加一些文字:

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

关于QPushButton中的富文本功能,AFAIK无法使用QPushButton进行此操作。

更新:  这是一种在QPushButton上放置一些richtext的方法。它使用我的评论描述的解决方案:将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 :(得分:1)

看看here。小部件名为 QwwRichTextButton

QwwRichTextButton 小部件提供了一个可以显示富文本的按钮。