我想你的問題是,你不能調用控制檯應用程序的功能,因爲它沒有被定義爲一個插槽。所以這裏是你如何做到的。
讓我們假設你有一個控制檯應用程序類,它可能是這樣的:
class ConsoleApp
{
public:
void run()
{
// Code which you want to trigger by a button in your UI.
}
}
然後,我們實現一個基於Qt的包裝類從QObject的類繼承,因此,能夠發送和接收信號。該類僅提供一個將執行委託給ConsoleApp類的自定義槽。
class ConsoleAppWrapper : public QObject
{
Q_OBJECT
public slots:
void startProgram()
{
m_consoleApp.run();
}
private:
ConsoleApp m_consoleApp;
}
好吧,現在我們需要一個按鈕,當按下按鈕時,它將觸發'run()'方法的調用。
int main(int argc, const char** argv)
{
QApplication app(argc, argv);
// Define wrapper for console app.
ConsoleAppWrapper wrapper;
// Define button and connect its 'clicked()' signal
// to the wrapper's 'startProgram()' slot.
QPushButton startProgramButton("Start Program");
connect(&startProgramButton, SIGNAL(clicked()), &wrapper, SLOT(startProgram()));
// Show the button.
startProgramButton.setVisible(true);
// Start Qt's event loop.
app.exec();
}
這應該給你一個'Start Program'按鈕,當按下它時,它將調用ConsoleApp :: run()方法。
雖然這個例子不是基於Qt設計器,但我希望這個例子可以幫助您理解Qt中的信號和插槽是如何工作的。
乾杯, 強尼
我建議你遵循Qt的教程在http://doc.qt.nokia.com/latest/tutorials.html –
你打算使用QML,還是UI設計師?這有很大的不同。 – kmdent
@kmdent - 我正在使用UI設計器。 –