我是一个很长时间的Java用户用Qt学习C++,我在理解方法如何工作方面遇到了很多麻烦.现在,我正在试图找出数据库,并试图用标题简化我的代码.通常在Java中我只有一个名为DatabaseControl的类,它带有一个void方法,可以执行我想要的任何操作.例如,正如我现在所做的那样,将员工添加到数据库.我通过做类似的事情来实例化这个类
DatabaseControl myDBControl = new DatabaseControl();
Run Code Online (Sandbox Code Playgroud)
然后用.执行方法
myDBControl.addEmploye();
Run Code Online (Sandbox Code Playgroud)
这将为用户提供一系列输入框,以输入员工姓名,部门等信息.
所以,现在转到C++.我有我的标题
class DatabaseControl
{
public:
DatabaseControl();
~DatabaseControl();
//Methods
void addEmployee();
};
Run Code Online (Sandbox Code Playgroud)
我的构造函数中没有任何参数,因为我想要做的就是在我的main中调用"addEmployee"方法,如上所示.在同一个头文件中,我在我的类声明下面有这个
void DatabaseControl::addEmployee(){
QSqlQuery qry;
bool ok;
QString firstName = QInputDialog::getText(NULL, "QInputDialog::getText()",
"Employee first name:", QLineEdit::Normal,
NULL, &ok);
if (ok && !firstName.isEmpty()){}
else{
QMessageBox msgBox;
msgBox.setWindowTitle("Error");
msgBox.setText("Failed to add employee.\nReason: No employee name given.");
msgBox.exec();
}
QString lastName = QInputDialog::getText(NULL, "QInputDialog::getText()",
"Employee last name:", QLineEdit::Normal,
NULL, &ok);
if (ok && !lastName.isEmpty()){
qry.prepare("INSERT INTO employees (firstname, lastname)" "VALUES (:f1, :f2)");
qry.bindValue(":f1", …Run Code Online (Sandbox Code Playgroud) 我试图从一个文件读取并进入文本编辑,它一直说QIODevice :: read:device not open..txt文件与我的.qrc和.cpp文件位于同一位置.我是在线跟踪分步指南.根据我的理解,当他们从第四季度到第五季度时,他们改变了一些东西.有没有人对我如何解决这个问题有任何暗示.谢谢
//My findstuff.h
#ifndef FINDSTUFF_H
#define FINDSTUFF_H
#include <QWidget>
namespace Ui {class FindStuff;}
class FindStuff : public QWidget{
Q_OBJECT
public:
explicit FindStuff(QWidget *parent = 0);
~FindStuff();
private slots:
void on_goButton_clicked();
private:
Ui::FindStuff *ui;
void getTextFile();
};
Run Code Online (Sandbox Code Playgroud) 我正在读这个问题并且有一个答案解释了为什么使用exit()是坏的,因为:
我应该澄清我正在使用Qt,所以代码已经有点"复杂",因为我正在利用信号和插槽.话虽这么说,对于问题#1,我看到它与#2有关,但我的代码目前试图避免使用,exit()因为我被告知它会使我的代码看起来像一团糟,但避免exit使它变得一团糟.我有一些功能,不需要返回任何东西,返回东西.例如,当我有用户注册并且他们的用户名已经存在时,而不是仅仅exit()在告知用户注册失败后调用(这是在这种情况下所需的行为)我返回false到一个函数然后返回false到另一个函数然后返回false到然后我的main检查该函数是返回true还是false,如果返回false则返回0.这样可以避免exit()代码干净.
对于第三个问题,不使用exit(0)告诉操作系统该程序是否已完成运行并且操作系统将自行释放该内存?我运行了一个测试用例,exit(0)当我按下一个按钮时,该过程从进程列表中删除并释放内存,那为什么这也是一个问题呢?这似乎是一个彻头彻尾的错误陈述,至少在Windows上.
首先,让我向您展示到目前为止的代码:
public void populateArray(){
//NOTE: THIS METHOD SHOULD BE RUN FIRST. Many of the methods in this class rely on a populated file array to function.
// This method will populate our file array.
// First, we note the directory we want to pull files from.
File folder = new File("HR");
File dir = new File("");
File file = new File("");
//Then we fill an array with the list of documents in that directory
//This will also include folders.
int …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个定期切换大写锁定键的脚本,但我也希望能够切换脚本,因为它会导致其他功能出现问题(例如alt选项卡,并在任务栏中滚动窗口以查看预览)
我到目前为止的剧本是
:outer while($true){
do{
echo "Toggle with F12";
$x = [System.Console]::ReadKey()
}while( $x.Key -ne "F12" )
while($true){
$wsh = New-Object -ComObject WScript.Shell
$wsh.SendKeys('{CAPSLOCK}')
sleep 0.3
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wsh)
Remove-Variable wsh
if ($Host.UI.RawUI.KeyAvailable) {
$key = $Host.UI.RawUI.ReadKey()
if($key.Key -ne "F12"){
break outer
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
脚本等待用户按F12,然后一旦按下F12,我希望它开始切换大写锁定键0.3秒,直到用户再次按下F12.理想情况下,我希望这在背景中发生,但我不知道这是否可能.我不希望用户必须打开控制台窗口来切换脚本.
现在运行的方式是,在用户按下F12之后,脚本将切换一次,然后退出.如果我删除Remove-Variable之后的条件,脚本将按我的意愿运行,除非它可以停止的唯一方法是控制台窗口关闭.
这是家庭作业,所以我更喜欢一些解释,而不仅仅是给我答案.
我有一个通用的Pair类,它可以取任何键值K和任何值V.
目标是编写一个通用方法:
public static <...> Collection<Pair<...>> sortPairCollection(Collection <Pair<....>> col)
唯一的另一个原则是K类型必须实现Comparable <...>.
经过一番挖掘,我看到人们推荐这样的东西:
public static Collection<Pair<?,?>> sortPairCollection(Collection<Pair<?,?>> col)
{
Collections.sort(col, new Comparator<Pair<?,?>>(){
@Override
public int compare(Pair<?, ?> x, Pair<?, ?> y) {
return (Integer)x.v() - (Integer)y.v();
}
});
}
Run Code Online (Sandbox Code Playgroud)
但这对我不起作用,我得到一个错误,指出sort方法不适用于那些参数.我真的不知道从哪里开始.