Changeset ec8471 for src/UIElements/Views
- Timestamp:
- Aug 5, 2015, 5:32:13 PM (9 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- 6fe4f7
- Parents:
- b9e47e
- git-author:
- Frederik Heber <heber@…> (07/25/15 13:06:15)
- git-committer:
- Frederik Heber <heber@…> (08/05/15 17:32:13)
- Location:
- src/UIElements/Views/Qt4
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
src/UIElements/Views/Qt4/QDebugStream.hpp
rb9e47e rec8471 14 14 #endif 15 15 16 #include <Q Debug>17 #include <Q TextEdit>16 #include <QObject> 17 #include <QPlainTextEdit> 18 18 #include <QMutex> 19 19 20 #include <ostream> 21 #include <streambuf> 22 #include <string> 20 /** 21 * Taken from http://www.qtforum.de/forum/viewtopic.php?t=7970 22 */ 23 class QDebugStream : public QObject, std::basic_streambuf<char>{ 23 24 24 /** This class connects an output stream, such as std::cout, and a QTextEdit. 25 * 26 * It works by overriding certain streambuf functions such as xsputn() and 27 * overflow(). 28 * 29 * This code is copied from the questions posted here 30 * http://stackoverflow.com/questions/10308425/redirect-stdcout-to-a-qtextedit 31 * which worked right away. 32 */ 33 class QDebugStream : public std::basic_streambuf<char> 34 { 25 Q_OBJECT 26 27 signals: 28 void sendString(QString text); 29 35 30 public: 36 QDebugStream(std::ostream &stream, QTextEdit* text_edit) : 37 m_stream(stream) 38 { 39 log_window = text_edit; 40 m_old_buf = stream.rdbuf(); 41 stream.rdbuf(this); 42 } 43 ~QDebugStream() 44 { 45 // output anything that is left 46 if (!m_string.empty()) { 47 change_mutex.lock(); 48 log_window->append(m_string.c_str()); 49 qDebug() << m_string.c_str(); 50 change_mutex.unlock(); 51 } 31 QDebugStream(std::ostream &stream, QPlainTextEdit* text_edit) : m_stream(stream){ 32 log_window = text_edit; 33 m_old_buf = stream.rdbuf(); 34 stream.rdbuf(this); 52 35 53 m_stream.rdbuf(m_old_buf); 54 } 36 connect(this, SIGNAL(sendString(QString)), text_edit, SLOT(appendPlainText (QString))); 37 } 38 ~QDebugStream(){ 39 // output anything that is left 40 if (!m_string.empty()) 41 emit sendString(m_string.c_str()); 42 //log_window->appendPlainText(m_string.c_str()); 43 m_stream.rdbuf(m_old_buf); 44 } 55 45 56 46 protected: 57 virtual int_type overflow(int_type v) 58 { 59 if (v == '\n') { 60 change_mutex.lock(); 61 log_window->append(m_string.c_str()); 62 qDebug() << m_string.c_str(); 63 m_string.erase(m_string.begin(), m_string.end()); 64 change_mutex.unlock(); 65 } else 66 m_string += v; 47 virtual int_type overflow(int_type v){ 48 mutex.lock(); 49 if (v == '\n'){ 50 emit sendString(m_string.c_str()); 51 //log_window->appendPlainText(m_string.c_str()); 52 m_string.erase(m_string.begin(), m_string.end()); 53 } 54 else 55 m_string += v; 67 56 68 return v; 69 } 57 mutex.unlock(); 58 return v; 59 } 70 60 71 virtual std::streamsize xsputn(const char *p, std::streamsize n) 72 { 73 change_mutex.lock(); 74 m_string.append(p, p + n); 75 change_mutex.unlock(); 61 virtual std::streamsize xsputn(const char *p, std::streamsize n){ 62 mutex.lock(); 76 63 77 size_t pos = 0;78 while (pos != std::string::npos) {79 pos = m_string.find('\n');80 if (pos != std::string::npos) {81 std::string tmp(m_string.begin(), m_string.begin() + pos);82 change_mutex.lock();83 log_window->append(tmp.c_str());84 qDebug() << tmp.c_str();85 m_string.erase(m_string.begin(), m_string.begin() + pos + 1);86 change_mutex.unlock();64 m_string.append(p, p + n); 65 size_t pos = 0; 66 while (pos != std::string::npos){ 67 pos = m_string.find('\n'); 68 if (pos != std::string::npos){ 69 std::string tmp(m_string.begin(), m_string.begin() + pos); 70 emit sendString(tmp.c_str()); 71 //log_window->appendPlainText(tmp.c_str()); 72 m_string.erase(m_string.begin(), m_string.begin() + pos + 1); 73 } 87 74 } 88 }89 75 90 return n; 91 } 76 mutex.unlock(); 77 return n; 78 } 92 79 93 80 private: 94 std::ostream &m_stream; 95 std::streambuf *m_old_buf; 96 std::string m_string; 97 98 QTextEdit* log_window; 99 100 QMutex change_mutex; 81 std::ostream &m_stream; 82 std::streambuf *m_old_buf; 83 std::string m_string; 84 QPlainTextEdit* log_window; 85 QMutex mutex; 101 86 }; 102 87 103 #endif /* QDEBUGSTREAM_HPP_ */ 88 89 #endif // QDEBUGSTREAM_HPP -
src/UIElements/Views/Qt4/QtLogBox.cpp
rb9e47e rec8471 45 45 46 46 QtLogBox::QtLogBox(QWidget * _parent) : 47 Q TextEdit (_parent),47 QPlainTextEdit (_parent), 48 48 logbuf(std::cout, this) 49 49 { … … 80 80 81 81 // recast event 82 Q TextEdit::mousePressEvent(e);82 QPlainTextEdit::mousePressEvent(e); 83 83 } 84 84 -
src/UIElements/Views/Qt4/QtLogBox.hpp
rb9e47e rec8471 14 14 #endif 15 15 16 #include <Q TextEdit>16 #include <QPlainTextEdit> 17 17 18 18 #include <string> … … 27 27 * 28 28 */ 29 class QtLogBox : public Q TextEdit29 class QtLogBox : public QPlainTextEdit 30 30 { 31 31 Q_OBJECT
Note:
See TracChangeset
for help on using the changeset viewer.