- fix: mainwindow action's short cut doesn't work, if the action is not in menu or toolbar
- fix: when run all cases for a problem, processing of output is slow
This commit is contained in:
parent
f298cc7b47
commit
002f9d4805
1
NEWS.md
1
NEWS.md
|
@ -6,6 +6,7 @@ Red Panda C++ Version 0.14.0
|
|||
- fix: code folding calcuation not correct when some codes are folded and editing after them
|
||||
- enhancement: code completion ui redesigned
|
||||
- fix: mainwindow action's short cut doesn't work, if the action is not in menu or toolbar
|
||||
- fix: when run all cases for a problem, processing of output is slow
|
||||
|
||||
Red Panda C++ Version 0.13.4
|
||||
- fix: when copy comments, don't auto indent
|
||||
|
|
|
@ -325,7 +325,7 @@ void CompilerManager::runProblem(const QString &filename, const QString &argumen
|
|||
connect(mRunner, &Runner::runErrorOccurred, pMainWindow ,&MainWindow::onRunErrorOccured);
|
||||
connect(execRunner, &OJProblemCasesRunner::caseStarted, pMainWindow, &MainWindow::onOJProblemCaseStarted);
|
||||
connect(execRunner, &OJProblemCasesRunner::caseFinished, pMainWindow, &MainWindow::onOJProblemCaseFinished);
|
||||
connect(execRunner, &OJProblemCasesRunner::newOutputLineGetted, pMainWindow, &MainWindow::onOJProblemCaseNewOutputLineGetted);
|
||||
connect(execRunner, &OJProblemCasesRunner::newOutputGetted, pMainWindow, &MainWindow::onOJProblemCaseNewOutputGetted);
|
||||
mRunner->start();
|
||||
}
|
||||
|
||||
|
|
|
@ -79,10 +79,10 @@ void OJProblemCasesRunner::runCase(int index,POJProblemCase problemCase)
|
|||
}
|
||||
QByteArray readed;
|
||||
QByteArray buffer;
|
||||
QStringList outputLines;
|
||||
QByteArray output;
|
||||
while (true) {
|
||||
process.waitForFinished(100);
|
||||
readed = process.readAll();
|
||||
readed = process.read(5001);
|
||||
buffer += readed;
|
||||
if (process.state()!=QProcess::Running) {
|
||||
break;
|
||||
|
@ -97,30 +97,15 @@ void OJProblemCasesRunner::runCase(int index,POJProblemCase problemCase)
|
|||
}
|
||||
if (errorOccurred)
|
||||
break;
|
||||
QList<QByteArray> lines = splitByteArrayToLines(buffer);
|
||||
// qDebug()<<"----do buffer----";
|
||||
// qDebug()<<readed;
|
||||
// qDebug()<<buffer;
|
||||
// qDebug()<<lines.count();
|
||||
if (lines.count()>=2) {
|
||||
for (int i=0;i<lines.count()-1;i++) {
|
||||
QString line = QString::fromLocal8Bit(lines[i]);
|
||||
emit newOutputLineGetted(problemCase->getId(),line);
|
||||
outputLines.append(line);
|
||||
}
|
||||
buffer = lines.last();
|
||||
while (buffer.endsWith('\0')) {
|
||||
buffer.remove(buffer.length()-1,1);
|
||||
}
|
||||
if (buffer.length()>5000) {
|
||||
emit newOutputGetted(problemCase->getId(),QString::fromLocal8Bit(buffer));
|
||||
output.append(buffer);
|
||||
buffer.clear();
|
||||
}
|
||||
}
|
||||
if (process.state() == QProcess::ProcessState::NotRunning)
|
||||
buffer += process.readAll();
|
||||
QList<QByteArray> lines = splitByteArrayToLines(buffer);
|
||||
for (int i=0;i<lines.count();i++) {
|
||||
QString line = QString::fromLocal8Bit(lines[i]);
|
||||
emit newOutputLineGetted(problemCase->getId(),line);
|
||||
outputLines.append(line);
|
||||
}
|
||||
output.append(buffer);
|
||||
if (errorOccurred) {
|
||||
//qDebug()<<"process error:"<<process.error();
|
||||
switch (process.error()) {
|
||||
|
@ -144,7 +129,7 @@ void OJProblemCasesRunner::runCase(int index,POJProblemCase problemCase)
|
|||
break;
|
||||
}
|
||||
}
|
||||
problemCase->output = linesToText(outputLines);
|
||||
problemCase->output = QString::fromLocal8Bit(output);
|
||||
}
|
||||
|
||||
void OJProblemCasesRunner::run()
|
||||
|
|
|
@ -32,7 +32,7 @@ public:
|
|||
signals:
|
||||
void caseStarted(const QString& id, int current, int total);
|
||||
void caseFinished(const QString& id, int current, int total);
|
||||
void newOutputLineGetted(const QString&id, const QString& newOutputLine);
|
||||
void newOutputGetted(const QString&id, const QString& newOutputLine);
|
||||
private:
|
||||
void runCase(int index, POJProblemCase problemCase);
|
||||
private:
|
||||
|
|
|
@ -3117,9 +3117,9 @@ void MainWindow::onProblemCaseIndexChanged(const QModelIndex ¤t, const QMo
|
|||
POJProblemCase problemCase = mOJProblemModel.getCase(idx.row());
|
||||
if (problemCase) {
|
||||
ui->btnRemoveProblemCase->setEnabled(true);
|
||||
ui->txtProblemCaseInput->setText(problemCase->input);
|
||||
ui->txtProblemCaseInput->setPlainText(problemCase->input);
|
||||
ui->txtProblemCaseInput->setReadOnly(false);
|
||||
ui->txtProblemCaseExpected->setText(problemCase->expected);
|
||||
ui->txtProblemCaseExpected->setPlainText(problemCase->expected);
|
||||
ui->txtProblemCaseExpected->setReadOnly(false);
|
||||
updateProblemCaseOutput(problemCase);
|
||||
return;
|
||||
|
@ -4081,9 +4081,9 @@ void MainWindow::onOJProblemCaseFinished(const QString& id, int current, int tot
|
|||
updateProblemTitle();
|
||||
}
|
||||
|
||||
void MainWindow::onOJProblemCaseNewOutputLineGetted(const QString &, const QString &line)
|
||||
void MainWindow::onOJProblemCaseNewOutputGetted(const QString &, const QString &line)
|
||||
{
|
||||
ui->txtProblemCaseOutput->append(line);
|
||||
ui->txtProblemCaseOutput->appendPlainText(line);
|
||||
}
|
||||
|
||||
void MainWindow::cleanUpCPUDialog()
|
||||
|
@ -5519,7 +5519,7 @@ void MainWindow::doCompileRun(RunType runType)
|
|||
void MainWindow::updateProblemCaseOutput(POJProblemCase problemCase)
|
||||
{
|
||||
ui->txtProblemCaseOutput->clear();
|
||||
ui->txtProblemCaseOutput->setText(problemCase->output);
|
||||
ui->txtProblemCaseOutput->setPlainText(problemCase->output);
|
||||
if (problemCase->testState == ProblemCaseTestState::Failed) {
|
||||
QStringList output = textToLines(problemCase->output);
|
||||
QStringList expected = textToLines(problemCase->expected);
|
||||
|
@ -5666,7 +5666,6 @@ void MainWindow::on_actionExport_As_HTML_triggered()
|
|||
|
||||
void MainWindow::on_actionMove_To_Other_View_triggered()
|
||||
{
|
||||
qDebug()<<"test";
|
||||
Editor * editor = mEditorList->getEditor();
|
||||
if (editor) {
|
||||
mEditorList->swapEditor(editor);
|
||||
|
|
|
@ -194,7 +194,7 @@ public slots:
|
|||
void onRunProblemFinished();
|
||||
void onOJProblemCaseStarted(const QString& id, int current, int total);
|
||||
void onOJProblemCaseFinished(const QString& id, int current, int total);
|
||||
void onOJProblemCaseNewOutputLineGetted(const QString& id, const QString& line);
|
||||
void onOJProblemCaseNewOutputGetted(const QString& id, const QString& line);
|
||||
void cleanUpCPUDialog();
|
||||
void onDebugCommandInput(const QString& command);
|
||||
void onDebugEvaluateInput();
|
||||
|
|
|
@ -506,7 +506,7 @@
|
|||
<enum>QTabWidget::South</enum>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>5</number>
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
|
@ -1348,33 +1348,24 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QTextEdit" name="txtProblemCaseInput">
|
||||
<item row="1" column="1">
|
||||
<widget class="QPlainTextEdit" name="txtProblemCaseOutput">
|
||||
<property name="lineWrapMode">
|
||||
<enum>QTextEdit::NoWrap</enum>
|
||||
</property>
|
||||
<property name="acceptRichText">
|
||||
<bool>false</bool>
|
||||
<enum>QPlainTextEdit::NoWrap</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QTextEdit" name="txtProblemCaseOutput">
|
||||
<item row="1" column="0">
|
||||
<widget class="QPlainTextEdit" name="txtProblemCaseInput">
|
||||
<property name="lineWrapMode">
|
||||
<enum>QTextEdit::NoWrap</enum>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
<enum>QPlainTextEdit::NoWrap</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QTextEdit" name="txtProblemCaseExpected">
|
||||
<widget class="QPlainTextEdit" name="txtProblemCaseExpected">
|
||||
<property name="lineWrapMode">
|
||||
<enum>QTextEdit::NoWrap</enum>
|
||||
</property>
|
||||
<property name="acceptRichText">
|
||||
<bool>false</bool>
|
||||
<enum>QPlainTextEdit::NoWrap</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
Loading…
Reference in New Issue