我最近一直在努力学习C++和Qt4,但我遇到了绊脚石.
我有以下类和实现:
class Window : public QWidget
{
public:
Window();
public slots:
void run();
private:
//...
};
Run Code Online (Sandbox Code Playgroud)
和
Window::Window()
{
//...
connect(runBtn,SIGNAL(clicked()),this,SLOT(run()));
//...
}
Window::run()
{
//...
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试构建并运行它时,尽管它构建得很好,它会立即退出并显示消息
Object::connect: No such slot QWidget::run()
Run Code Online (Sandbox Code Playgroud)
除非我做错了什么,否则Qt似乎没有认识到这个问题 run()
有人可以帮忙吗?
更新:
代码现在是:
class Window : public QWidget
{
Q_OBJECT
public:
Window(QWidget *parent = 0);
public slots:
void run();
private:
//...
};
Run Code Online (Sandbox Code Playgroud)
和
Window::Window(QWidget *parent) : QWidget(parent)
{
//...
connect(runBtn,SIGNAL(clicked()),this,SLOT(run()));
//...
}
Window::run()
{
//...
}
Run Code Online (Sandbox Code Playgroud)
该程序仍"意外完成",但不再告诉我没有这样的事情 QWidget::run()
int main (int argc, char* argv[])
{
QApplication app(argc, argv);
QTextStream cout(stdout, QIODevice::WriteOnly);
// Declarations of variables
int answer = 0;
do {
// local variables to the loop:
int factArg = 0;
int fact(1);
factArg = QInputDialog::getInteger(0, "Factorial Calculator",
"Factorial of:", 1);
cout << "User entered: " << factArg << endl;
int i=2;
while (i <= factArg) {
fact = fact * i;
++i;
}
QString response = QString("The factorial of %1 is %2.\n%3")
.arg(factArg).arg(fact)
.arg("Do you want to …Run Code Online (Sandbox Code Playgroud) 我刚开始用Qt.尽管今天晚上花了一些时间,但我仍在努力将我的UI设置代码移出main它自己的类.
#include <QtGui>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget *window = new QWidget;
QLabel *hw = new QLabel(QObject::tr("Hello World!"));
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(hw);
window->setLayout(layout);
window->show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试创建自己的类并传递window给它但遇到编译错误.
main.cpp中:
#include <QtGui>
#include "hworld.h"
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QDialog *hWorld = new hWorld;
hWorld->show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
hworld.h:
#ifndef HWORLD_H
#define HWORLD_H
#include <QtGui>
class hWorld : public QDialog {
Q_OBJECT
public:
hWorld(QWidget *parent = …Run Code Online (Sandbox Code Playgroud) 我很擅长使用QT4.我试图在已经运行的应用程序中使用sql.但是,当我尝试编译时,我收到此错误:"'QSqlDatabase'未在此范围内声明."
这是相关代码:
#include <QtSql>
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("bigblue");
db.setDatabaseName("flightdb");
db.setUserName("acarlson");
db.setPassword("1uTbSbAs");
bool ok = db.open();
Run Code Online (Sandbox Code Playgroud)
我已将QT + = sql添加到我的.pro文件中.
从上面复制了上面的代码:http://qt.nokia.com/doc/4.5/qtsql.html
知道我做错了什么吗?
我正在尝试编译http://doc.trolltech.com/4.4/mainwindows-application.html上的基本教程程序并遇到问题.
按照教程程序的方式执行操作会产生编译错误:
In file included from debug\moc_mainwindow.cpp:10:
debug\../mainwindow.h:2: error: expected class-name before '{' token
debug\../mainwindow.h:5: error: ISO C++ forbids declaration of `Q_OBJECT' with no type
Run Code Online (Sandbox Code Playgroud)
问题是需要
#include <QtGui>
Run Code Online (Sandbox Code Playgroud)
教程程序将它放在mainwindow.cpp中,这是理想的方法,但它不会被复制到moc文件中.
如果我将它放入mainwindow.h中,一切正常,但在每个头文件中执行此操作都是不优雅的,并且一旦程序变大就会延长编译时间.
自教程编写以来,这是否发生了变化?(我正在使用最新的Qt 4.5.3,Windows SDK安装,从命令行编译.)我错过了什么,或者是否有任何已知的修复此问题?
如何让Qt应用程序看起来像Adobe Lightroom风格?
是皮肤还是css风格?
或者也许在Lightroom中使用了其他一些UI框架?
我想创建一些带有"视频时间轴"自定义小部件的表单,如Adobe Flash和Lightroom风格,但我不确定从什么开始,尤其是"时间线小部件".
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
this->setupUi(this);
this->setupActions();
this->setWindowTitle(tr("CuteEdit"));
label = new QLabel(tr("No Open Files"));
this->setCentralWidget(label);
label->setAlignment(Qt::AlignCenter);
}
Run Code Online (Sandbox Code Playgroud)
通过上面的代码,我得到了一个这样的GUI(它是整个屏幕的截图,只观察电子书页面中间显示的窗口).(我使用过QT Designer)
现在,我希望用户选择文件 - >打开..出现一个对话框,文件被选中..它的内容将显示在*textEdit小部件中..功能就在下面..
void MainWindow::loadFile()
{
QString filename = QFileDialog::getOpenFileName(this);
QFile file(filename);
if (file.open(QIODevice::ReadOnly|QIODevice::Text))
{
label->hide();
textEdit->setPlainText(file.readAll());
mFilePath = filename;
QMainWindow::statusBar()->showMessage(tr("File successfully loaded."), 3000);
}
}
Run Code Online (Sandbox Code Playgroud)
窗口在行崩溃: -
textEdit-> setPlainText(file.readAll());
但如果我评论这条线: -
这 - > setCentralWidget(标签);
我的意思是我删除标签作为中央小部件,程序按预期运行..为什么?
而且,我不清楚CentralWidget的概念.请指导.
我正在使用Qt Framework用C++编写应用程序.它应该通过http下载文件,并使用QProgressbar显示下载进度 - 但我没有让这部分工作!
示例代码:
QProgressBar* pbar = new QProgressBar();
//calls the website and returns the QNetworkReply*
QNetworkReply* downloader = Downloader->getFile();
connect(downloader, SIGNAL(downloadProgress(qint64,qint64)), pbar, SLOT(setValue(int)));
Run Code Online (Sandbox Code Playgroud)
如果我运行我的代码,会发生以下错误:
QObject::connect: Incompatible sender/receiver arguments
QNetworkReplyImpl::downloadProgress(qint64,qint64) --> QProgressBar::setValue(int)
Run Code Online (Sandbox Code Playgroud)
此信号适合连接到QProgressBar :: setValue()以更新提供用户反馈的QProgressBar.
我的代码出了什么问题,如何让它运行?我在Linux下运行Qt 4.5.3.
感谢您的帮助,对不起我的英语!
我想知道使用int**比使用QList>或者它们是否非常相等更有效.我必须做很多计算,所以我可能想要更快
我正在尝试用QT 4.6制作一个简单的GUI.我创建了一个代表菜单栏的separete类:
MenuBar::MenuBar()
{
aboutAct = new QAction(tr("&About QT"), this);
aboutAct->setStatusTip(tr("Show the application's About box"));
connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
quitAct = new QAction(tr("&Quit"),this);
quitAct->setStatusTip(tr("Exit to the program"));
//connect(quitAct, SIGNAL(triggered()), &QApp, SLOT(quit()));
menuFile = new QMenu("File");
menuFile->addAction(quitAct);
menuLinks = new QMenu("Links");
menuAbout = new QMenu("Info");
menuAbout->addAction(aboutAct);
addMenu(menuFile);
addMenu(menuLinks);
addMenu(menuAbout);
}
Run Code Online (Sandbox Code Playgroud)
我无法将quitAct的信号与主应用程序的退出槽连接,因为它在MenuBar类中是不可见的.
//connect(quitAct, SIGNAL(triggered()), &QApp, SLOT(quit()));
Run Code Online (Sandbox Code Playgroud)
我该怎么做?