我尝试在Linux上的Qt 4.5.3上处理SQLite数据库.我已经创建了数据库.
然后,我尝试在Qt上执行select:
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(filename); // Here is FULL path to the database. I've checked it twice :)
bool ok = db.open();
qDebug() << db.tables();
QSqlQuery query;
query.exec("select * from lessons");
qDebug() << query.size();
qDebug() << query.isSelect();
qDebug() << query.isValid();
Run Code Online (Sandbox Code Playgroud)
但调试控制台说:
("lessons", "weeklessons", "weeks")
-1
true
false
Run Code Online (Sandbox Code Playgroud)
为什么选择什么?我做错了什么?
到目前为止,我知道几种#includeQt类的方法:
#include <QtModule>
例如QDomDocument,这带来了特定模块的所有类QDomElement,QDomNode以及来自的许多其他类#include <QtXml>.
#include <QClassName>
这增加了一个特定的类,可能想要使用,例如声明QEvent,QStringList,QFile.
#include <qcstyleheader.h>
这具有前一方法的效果,除了不同的标题名称.
所以我想知道,#includeQt课还有其他方法吗?它们是否相同,或者由于某些原因,它们中的一些是否优先于其他人?这取决于#include内部.cpp还是.h文件?这会影响可执行文件的编译速度和大小吗?
简而言之,最好的方法是什么?
为什么这个程序正常运行并显示主窗口?我希望它退出,因为quit()在构造函数中调用.
Main.cpp的:
#include<QApplication>
#include"MainWindow.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
MainWindow.cpp:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
qApp->quit();
}
void MainWindow::closeEvent(QCloseEvent *)
{
qDebug("Hello world!");
}
Run Code Online (Sandbox Code Playgroud) 我有follwing代码,其中moreButton一个QPushButton.当我切换按钮时,没有任何反应.
难道不应该显示或隐藏secondaryGroupBox和tertiaryGroupBox?
QObject::connect(moreButton, SIGNAL(toggled(bool)), secondaryGroupBox, SLOT(setVisible(bool)));
QObject::connect(moreButton, SIGNAL(toggled(bool)), tertiaryGroupBox, SLOT(setVisible(bool)));
Run Code Online (Sandbox Code Playgroud) 我想在使用qmake 构建静态库时为链接器提供选项.假设我在使用MSVC构建时想要获得详细的链接器输出.项目文件如下所示:
# mylib.pro
TEMPLATE = lib
TARGET = mylib
CONFIG += staticlib
QT += core
win32-msvc*: QMAKE_LFLAGS += /VERBOSE
unix: QMAKE_LFLAGS += -v
Run Code Online (Sandbox Code Playgroud)
这是整个项目文件.它应该导致一个空的静态库,其中没有对象.
设置既不QMAKE_LFLAGS也没有QMAKE_LFLAGS_STATIC_LIB,也没有LIBS对连接器有任何影响.这些变量中没有设置甚至使它成为Makefile.如果QMAKE_LFLAGS有效,我希望在命令行上看到/VERBOSE或-v传递给链接器,适用于给定的平台.
使用什么makefile生成器并不重要,这种行为似乎是一致的.这两个感兴趣的平台是.
qmake -spec win32-msvc2008
qmake -spec macx-llvm
Run Code Online (Sandbox Code Playgroud)
由于qmake的跨平台特性,您可以在碰巧安装Qt的任何平台上进行测试.这从qt 4.8.4和5.1.1再现qmake.mkspec中给出的msvc版本无关紧要.
我有一个QMainWindow,我已插入mdiArea主窗口.
您必须先看到以下图像:

正如您所见,灰色区域mdiArea和主窗口之间的空间(边距)mdiArea是我想要删除它.
我使用过setContentsMargins函数,但没有做任何事情.
我怎样才能删除这些空格?
我希望如下图所示:

我有一个标签,并在样式表中设置了填充,并使用设置了边距setMargin()。
ui->label->setPixmap(redRectWithGreenBorder(80, 40));
ui->label->setStyleSheet("QLabel {border: 1px solid gray;border-radius: 2px;background-color: white;padding: 0px 5px 10px 15px;}");
ui->label->setMargin(5);
Run Code Online (Sandbox Code Playgroud)
但这实际上是这样的:

可见边距为5、10、15和20(我使用图像编辑器检查过)。也就是说,它们等于该边的样式表的值加上的值margin(),即0 + 5、5 + 5、10 + 5、20 + 5。
但是,文档说明了以下内容setMargin():
margin:int此属性保存边距的宽度。
边距是帧的最内像素和内容的最外像素之间的距离。
默认边距为0。
如果我以书面形式取文件,我会期望边距是内容与边界之间的真实距离。但事实并非如此。而是,边距和样式表填充的总和才是实际边距。
我的问题是,此行为在文档中的何处描述?在文档中是否有其他地方指定了我错过的这种行为?
默认情况下,QComboBox列表视图具有阴影效果.有没有办法删除它?阴影是由QStyle或以其他方式控制的?

我在Qt中使用c ++,我想绘制一个椭圆.从Qt文档中我发现我可以使用drawEllipse从边界矩形中绘制一个椭圆:
void QPainter::drawEllipse(const QRectF &rectangle)
Run Code Online (Sandbox Code Playgroud)
矩形由下式给出:
QRectF(qreal x, qreal y, qreal width, qreal height)
Run Code Online (Sandbox Code Playgroud)
但是,这仅提供具有水平/垂直长轴和短轴的椭圆.
我的椭圆由两个坐标集给出,表示长轴和长轴和短轴的长度之比.因此,轴可以具有非水平或垂直的斜率.(无论如何我需要使用这个方法,因为我也将它导出到dxf文件,其中有这种表示法)
我的问题是:
有没有其他方法来绘制椭圆而不是使用边界矩形然后旋转它?
将它放在水平/垂直矩形中然后在从头开始有轴坐标时计算旋转似乎有点傻.
我正在使用C ++ Qt应用程序。为了在应用程序或所连接的设备出现故障时为用户提供帮助,该程序会导出所有内部设置,并将它们存储在一个普通文件中(此刻为csv)。然后将该文件发送给公司(例如,每封邮件)。
为了避免对导出的设置进行不注意的操作(例如,导出后由用户手动操作),我需要某种机制来检测到这一点。
该方法应尽可能简单,因为这不是非常关键的信息,但仍然有效。
我能想到的只是散列或加密,但是我很确定已经有一个简单而优雅的解决方案。