2010-05-27 30 views
0

基本上,我想要一個簡單的pushButton,當它按下時退出應用程序。不能在一個簡單的程序中按QPushButton

爲什麼不能在這個簡單的程序中按下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(); 
} 
+0

'我不能按按鈕'。爲什麼不?單擊按鈕時會發生什麼情況:是否生成動畫?你甚至看到一個按鈕? – RvdK 2010-05-27 12:33:03

+0

你的意思是這個按鈕被禁用了嗎? – 2010-05-27 12:35:13

+0

不,Qlabel與QPushButton重疊 – 2010-05-27 12:51:50

回答

3

除了使用可以顯示豐富文本的按鈕類之外,還需要確保連接正確。

在您的示例中,您將按鈕的clicked信號連接到標籤的clear()插槽,這是無意義的。

要點擊按鈕時退出您的應用程序,您需要關閉主窗口。下面是代碼,以獲得正確的連接:

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

在你的榜樣改變的這一行代碼是不夠的,因爲你的標籤上的按鈕的頂部繪製,所以它不可能以圖形一下就可以了。你需要隱藏自己的標籤,並把一些文字到您的按鈕:

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

關於在QPushButton豐富的文本特徵,據我所知這是不可能用QPushButton做到這一點。

更新: 這裏是一個方法來把一些富文本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(); 
} 
+0

這是一個愚蠢的錯誤關閉()..但是,仍然這樣,我將無法顯示按鈕上的豐富多彩的文字。所以,這是怎麼做的呢? – 2010-05-27 12:45:19

+0

你可以使用QwwRichTextButton(參見mosg答案)。我從來沒有用過它。 或者您可以使用QTextDocument並將其繪製到QPixmap中,然後將該像素映射到您的按鈕上。 而不是文字。 – 2010-05-27 12:49:25

+0

@shadyabhi:看到我的答案的更新,我改變了你的代碼,以產生你想要的。 – 2010-05-27 13:19:03

1

看看here。 Widget名爲QwwRichTextButton

The QwwRichTextButton小部件提供了一個可以顯示富文本的按鈕。

+0

但是,沒有使用標準QT的方法,而不使用任何第三方庫。 – 2010-05-27 12:41:46

+1

@shadyabhi您可以換一種方式:從* wwWidgets *包中找到* QwwRichTextButton *實現代碼並將其用於您的項目中。 – mosg 2010-05-27 12:57:07