- 自动布局管理是否是全局相关的。意味着子容器可能改变整个父容器树的各种性质? 比如一个按钮的大小改变一个容器高度,而高度通过容器耦合到容器内的所有控件大小和位置,同时耦合到容器周围的空间的位置,耦合四散开来。 、 一个简单粗暴的方法是听命于父不顾子,由上一级指定尺寸。、然而QT里布局器一般没法指定尺寸,只能指定margin。显然是由容器中的控件尺寸偏好改变的容器尺寸,进而与父尺寸共同决定了容器。 故有此问
-
中文乱码问题
Qt4
- 在已经使用Utf-8编码的情况下,源代码中的中文受到良好支持。当源码中的中文向QString赋值时,传递过程以Byte字节进行,QString内部将其解释为ascii编码,并转为unicode(utf16)储存,从而导致乱码。解决方法是使用QTectCodec::fromUtf8()构造正确编码的字符串。或者用
手动设定编码。QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QTextStream in(&inputFile); in.setCodec(QTextCodec::codecForName("UTF-8"));
也可以用Tr()后跟英文字符串,然后用Qt Linguist翻译成资源文件,然后加载
Qt5
- 内部已改用UTF8,只要源代码和编译器都使用UTF8,那么就不用修改任何东西。
对于VS来说,在源文件开头加入
#pragma execution_character_set("utf-8")
即可
-
将数字转为字符串如何生成前导零?
- 使用
QString("%1").arg(num, width, 10, QLatin1Char('0'));
-
如何给主窗口的消息队列添加“重绘”事件?
- 使用postEvent
信号槽是线程安全的吗?
- 是
如何跨越线程传递信号?
- 需要写消息循环 如何使用Qt默认的线程池?
- 使用QThreadPool::globalInstance()获得,
class HelloWorldTask : public QRunnable
{
void run(){qDebug() << "Hello world from thread" <<Thread::currentThread();}
}
HelloWorldTask *hello = new HelloWorldTask();
// QThreadPool takes ownership and deletes 'hello' automatically
QThreadPool::globalInstance()->start(hello);
-
使用QGraphicsScene绘制大量2D图形的实际方法
- 比如需要一个视频显示窗口和一个进度条 可以继承QWidget
videoItem = new QGraphicsVideoItem;
videoItem->setSize(QSizeF(640, 480));
QGraphicsScene *scene = new QGraphicsScene(this);
QGraphicsView *graphicsView = new QGraphicsView(scene);
scene->addItem(videoItem);
QBoxLayout *layout = new QVBoxLayout;
layout->addWidget(graphicsView);
layout->addWidget(rotateSlider);
setLayout(layout);
这里的好处是可以通过videoItem->setTransform(QTransform().translate(x, y).rotate(angle).translate(-x, -y));控制视频画面的旋转