2012-10-29 23 views
16

Yardım -> Uygulama Hakkında menüsünden basit bir 'Hakkında' model iletişim kutusu oluşturmak istiyorum. QT Creator (.ui dosyası) ile kalıcı bir iletişim penceresi oluşturdum.Qt menü öğesinde kalıcı iletişim (.ui) öğesini tıklatın

'Hakkında' yuvasında hangi kod bulunmalıdır? (Benim about.ui dayanmaz)

Şimdi bu kod var, ama yeni bir kalıcı iletişim gösterir:

void MainWindow::on_actionAbout_triggered() 
{ 
    about = new QDialog(0,0); 
    about->show(); 
} 

Teşekkür!

cevap

26

İletişim kutusunu, kullanıcı arabiriminizle .ui dosyanızdan ayarlamanız gerekir. Qt uic derleyici, kodunuza eklemeniz gereken .ui dosyanızdan bir başlık dosyası oluşturur. .ui dosyanızın about.ui olarak adlandırıldığı ve İletişim Kutusu'nun About olarak adlandırıldığı varsayılırsa, , Ui_About sınıfını içeren ui_about.h dosyasını oluşturur. kurulum UI farklı yaklaşımlar en basit en Eğer daha iyi bir yaklaşım daha iyi diyaloglar kapsüller beri içinde belirli iletişim özgü herhangi bir işlevi uygulamak, böylece, devralma kullanmaktır

#include "ui_about.h" 

... 

void MainWindow::on_actionAbout_triggered() 
{ 
    about = new QDialog(0,0); 

    Ui_About aboutUi; 
    aboutUi.setupUi(about); 

    about->show(); 
} 

yapabilirsiniz vardır alt sınıfı:

AboutDialog.h:

#include <QDialog> 
#include "ui_about.h" 

class AboutDialog : public QDialog, public Ui::About { 
    Q_OBJECT 

public: 
    AboutDialog(QWidget * parent = 0); 
}; 

AboutDialog.cpp:

AboutDialog::AboutDialog(QWidget * parent) : QDialog(parent) { 

    setupUi(this); 

    // perform additional setup here ... 
} 

Kullanımı: Her durumda

#include "AboutDialog.h" 

... 

void MainWindow::on_actionAbout_triggered() { 
    about = new AboutDialog(this); 
    about->show(); 
} 

, önemli kod setupUi() yöntemini aramak.

BTW: Yukarıdaki koddaki iletişim kutusu modal değildir. Kalıcı bir iletişim kutusu göstermek için, iletişim kutusunun windowModality bayrağını Qt::ApplicationModal olarak ayarlayın veya show() yerine exec() kullanın.

+0

Teşekkür ederim, Andreas! Şu an için en basit olana gidiyor ... Gerçek şu ki, ui_about.h yaratılmadı ve şimdi ön ayarlı değil. Yani, önce belirttiğiniz kod ile proje derlemiyor. Elle ui_about.h oluşturmanın bir yolu var mı? .. –

+1

El ile 'uic about.ui -o ui_about.h' ile oluşturabilirsiniz. Ancak derleme sisteminiz buna dikkat etmelidir - '.pro' dosyanızda' FORMS = about.ui' öğesinin bulunduğundan emin olun. –

+0

.pro dosyasında tuhaf girdiniz var mı? Kaynak dosyaların oluşturulmadığı bir süre önce benzer bir sorun oluştu: http://stackoverflow.com/questions/12380171/qmake-not-generating-binary-resource-files/12431570#12431570 –

4

Kalıcı iletişim kutuları için, QDialogs'ın exec() yöntemini kullanmalısınız.

about = new QDialog(0, 0); 

// The method does not return until user closes it. 
about->exec(); 

// In this point, the dialog is closed. 

Docs

ki:

en yaygın yolu kalıcı bir iletişim kutusu onun exec() işlevini çağırmak olduğunu göstermek için. Kullanıcı diyaloğu kapattığında, exec() yararlı bir geri dönüş değeri sağlayacaktır.


Alternatif yöntem: kalıcı bir iletişim kutusu gerek yok . İletişimin modellemesini göstermesine ve accepted() ve rejected() sinyallerini uygun yuvalara bağlamasına izin verin.Daha sonra kodunuzu show() numaralı telefondan kabul edin. Böylece, bu şekilde, modal diyaloğa ihtiyacınız olmaz.

İlgili konular