如何写入QLineEdit(0.0 - 5.0) 范围内的浮点数?我使用 qregexp 来完成这样的任务,例如QRegExp a("([a-zA-Z]{3,30})")写入用户名,但不知道写入浮点数。
我有几个使用 Qt Visual Studio 工具创建的 Visual Studio 项目(在项目创建时总是可用的最新版本,一些可以追溯到支持 Qt 5 的第一个版本,现在是 2.2.1)。所有项目都是用 VS 2010 编译的,尽管 IDE 是 VS 2017(到目前为止是 15.7.4)。
从一段时间开始,一些项目开始报告链接错误,例如
错误 LNK2001:未解析的外部符号“公共:静态结构 QMetaObject const MyQtClass::staticMetaObject”(?staticMetaObject@MyQtClass@@2UQMetaObject@@B)
对于此示例,MyQtClass.h文件声明MyQtClass并具有Q_OBJECT宏。MyQtClass.cpp定义方法。
经过快速检查,我发现问题来自相关的 moc 文件(moc_MyQtClass.cpp如上例)被排除在当前配置的编译之外。这里是 .vcxproj 文件的摘录:
<ClCompile Include="GeneratedFiles\Debug\moc_MyQtClass.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_MyQtClass.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile>
Run Code Online (Sandbox Code Playgroud)
如果我修改 .vcxproj 文件以从 Debug 配置中删除排除项,则该项目可以正常工作。
该问题仅在与ed 类关联的主.cpp 文件Q_OBJECT被修改时发生(MyQtClass.cpp在我的示例中)。保存此类文件时,会修改 .vcxproj 文件并添加排除项。
这个问题不会出现在我拥有的每个 Qt 项目中,但是一旦它开始,它就会在每次修改关联的 .cpp 文件时不断出现。我一直无法发现它的模式。另外,在公司的几个开发系统中都发生过,所以我的电脑好像不是问题。
我发现的唯一解决方法是丢弃项目文件中的更改,但 …
在下图中,第一个QComboBox是禁用的:
我想强调的是,通过删除禁用QComboBoxes 的箭头无法更改该值.
我已经尝试修改已用于的样式表:
QComboBox::down-arrow:disabled {
border: 0;
background: transparent;
image: none;
height: 0;
width: 0;
}
Run Code Online (Sandbox Code Playgroud)
但它没有解决问题并与我当前的风格冲突(设置使用qApp->setStyle("fusion")):
我怎么才能得到它?
任何人都可以建议:

我试图遍历a QStringList,打印字符串,然后从列表中删除它.我似乎无法找到一个有效的QStringList方法!例如:
for ( QStringList::Iterator it = commandList.begin(); it != commandList.end(); ++it ) {
out << "Processed command: " << *it << endl;
*it.erase();
}
Run Code Online (Sandbox Code Playgroud)
给出编译错误:'QList :: Iterator'没有名为'erase'的成员
++it如果我在列表中途删除项目可能会失败)我想使用std::unique_ptr的删除器来保证一些代码会在离开作用域时执行。例如,假设我有一个Event带有 function的类set_event()。
我想确保在离开范围时,my_event.set_event()将调用该函数。我设法得到了类似的东西:
Event my_event;
auto releasing_function = [&my_event] (void*){my_event.set_event();};
std::unique_ptr<void, decltype(releasing_function)> safe_event((void*)1, releasing_function);
Run Code Online (Sandbox Code Playgroud)
但我觉得我们可以做得更好。也许是一个没有这个自动 lambda 函数的单行,或者避免这个丑陋的(void*)1. 甚至可能完全删除unique_ptr。
编辑:我想避免实用程序类。这太容易了:)
我有一个小型 Qt 绘图应用程序,并且我正在基于“主”组合框启用/禁用小部件(组合/旋转框)。例如,假设主设备是,它会根据combo1更改 中的条目,启用/禁用,并为选择中的某个条目设置一个值。不过,还有更多的小部件。combo2currentIndex()spin1spin1combo1
在聊天中(及以后)的小讨论之后,我使用了Qt::QueuedConnectionevery connect(),但这并没有阻止重新启用的小部件在重新启用时发出信号。这导致我connect()对所有重新启用的小部件都执行了许多操作,从而导致了多次绘图,这是我想避免的。就像现在一样,(几乎)所有小部件都plot()在 a 内部使用connect(),因此它是一个插槽的多个信号。
我的问题:有没有办法防止在重新启用小部件时发出信号?我可以plot()使用一些bool来检查绘图是否已执行并阻止相同类型的进一步操作,但这仍然会导致小部件发出信号并运行plot(),即使检查会阻止实际绘图,但这并不会这似乎不是可行的办法。我还希望避免运行installEventFilter()或类似的操作,因为这很可能会比之前的修复速度更慢。
我是Qt的新手,因此我遇到了GUI更新问题.我有2个类:ControlWidget在主线程和CameraController单独的线程中.
int main(int argc, char **argv)
{
QApplication app(argc, argv);
CameraController *cameraController = new CameraController;;
ControlWidget *main_window = new ControlWidget;
Thread getImageThread;
cameraController->moveToThread(&getImageThread);
getImageThread.start();
QTimer get_images_timer;
QObject::connect(&get_images_timer, SIGNAL(timeout()), cameraController, SLOT(onTimerOut()), Qt::QueuedConnection);
QObject::connect(cameraController, SIGNAL(sendLabel(QImage)), main_window, SLOT(getImage(QImage)), Qt::QueuedConnection);
QObject::connect(&get_images_timer, SIGNAL(timeout()), main_window, SLOT(update()), Qt::QueuedConnection);
get_images_timer.start(2000);
app.exec();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因此,每2秒我想从相机线程获取图像并将它们发送到主线程(动作发生,所以我QImage在main_window对象).然后我想把这个QImage放到cam1和cam2上QLabel.在这里我被困住了:
第一:当我使用setPixmap()方法QLabel.width()和QLabel.height()不同,那么image.width()和image.height()或pixmap.width()和pixmap.height().
第二:我无法想象QLabel.如果我什么this->ImageLayout->addWidget(cam1)都不做的话.this->update也没有帮助.
我有一个额外的GUI更新工作者吗?我究竟做错了什么?
源代码以获取更多信息:
CameraController.h …
我想知道是否可以使用std::back_inserter从更复杂的结构中创建仅包含单个元素的向量。例如,在以下代码中:
struct Person {
std::string first_name;
std::string last_name;
int id;
};
std::vector<Person> people;
// Populate 'people'...
// Extract last names into single vector
std::vector<std::string> last_names;
std::copy(begin(people), end(people), std::back_inserter(last_names)); // <... ?
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现的唯一解决方案是创建一个强制转换运算符Person -> std::string:
struct Person {
// ...
operator std::string() const { return last_name; }
};
Run Code Online (Sandbox Code Playgroud)
但是,如果我想将first_name和提取last_name到两个向量中,这不是一个好的解决方案,更不用说晦涩难懂的隐式转换了。
有什么方法可以指示std::back_inserter如何构造要插入的元素?任何其他方式来创建这样的向量?显然,我不是指原始方式:
std::vector<std::string> last_names;
last_names.reserve(people.size());
for (const auto& person : people) {
last_names.push_back(person.last_name);
}
Run Code Online (Sandbox Code Playgroud)
但对于一些<algorithm>类似的人 ;)
我更喜欢仅使用 C++ 的答案,但如果需要,我愿意接受 Boost 解决方案。
有什么方法可以将父管道的作业 ID 作为变量传递给子管道
package:
stage: package
script:
- zip -r ./service.zip
deploy:
stage: deploy
variables:
trigger:
include:
- project: '<namespace>/<project>'
ref: '<branch>'
file: '<path to yml file>'
strategy: depend
Run Code Online (Sandbox Code Playgroud) c++ ×8
qt ×6
c++11 ×1
copy ×1
gitlab ×1
gitlab-ci ×1
iterator ×1
notepad++ ×1
qcombobox ×1
qregexp ×1
qstringlist ×1
qt-vs-addin ×1
qtcore ×1
unique-ptr ×1